package com.activiti.dao.service;

import com.activiti.dao.model.Activiti_TaskCount;
import com.activiti.dao.model.Activiti_TaskInfo;
import com.activiti.dao.model.Activiti_TaskInfoRO;
import com.activiti.dao.model.TaskVo;
import com.erp.hr.dao.model.HrDepartment;
import com.erp.hr.dao.model.HrDepartmentCO;
import com.erp.hr.dao.model.HrStaffInfoRO;
import org.activiti.engine.impl.task.TaskDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.redragon.framework.hibernate.DaoCRUDIF;

import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

public interface ActivitiService extends DaoCRUDIF<Activiti_TaskInfo, Activiti_TaskInfo> {
    /**
     * 启动流程
     * @param processDefinitionKey 流程定义key
     * @param businessKey 业务id
     * @param params 流程变量
     * @return
     */
    public abstract ProcessInstance erpStartProcessInstance(String processDefinitionKey, String businessKey, Map params, String busiId);
    /**
     * 删除流程实例
     * @param processDefinitionKey 流程定义key
     */
    public abstract void  deleteProcessInstance(String processDefinitionKey);

    /**
     * 根据当前登陆人查询任务列表
     * @param staffInfo 当前用户职员信息
     * @return 任务列表
     */
    public abstract List<TaskVo> erpFindPersonalTaskList(HrStaffInfoRO staffInfo);
    public abstract List<TaskVo> erpFindPersonalTaskListByCount(HrStaffInfoRO staffInfo,int count);
    //获取当前任务
    public abstract Task erpGetCurrentTask(String processInstanceId);
    /**
     * 根据流程实例 ID 获取当前活动任务
     * @param pid 当前登陆人
     * @return 任务列表
     */
    public abstract Task erpFindPersonalTaskByPid(String pid);

    /**
     * 完成当前任务
     * @param taskId 当前活动id
     * @return
     */
    public void erpCompletTask(String taskId,String condition,Map<String, String> nextapproverids);
    /**
     * 获取当前流程的图片
     * @param processDefinitionId 流程实例id
     * @return
     */
    public InputStream getDefinitionImage(String processDefinitionId);
    /**
     * 获取当前将活动的流程节点任务
     * @param processDefinitionId 流程实例id
     * @return
     */
    public abstract Task erpFindPersonalTaskActive(String processDefinitionId);
    /**
     * 根据部门编码及岗位编码获取审批人编码
     * @return 审批人编码串  逗号分隔
     */
    public List<String> getStaffByPosition(String departmentCode,String positionId);
    public TaskDefinition getErpNextTask(String processInstanceId);

    public List<TaskVo> queryTaskInfo(List<TaskVo> taskVo);
    //统计当前登录员工代办、已办数量
    public Activiti_TaskCount queryTaskCount(String staffCode);

    //根据流程实例id 查询Activiti_TaskInfo对象
    public Activiti_TaskInfo queryActivitiTaskInfoByPid(String pid);
    public Task erpGetCurrentTask(String processInstanceId, String staffCode);
}
